package tsb.sax;

/**
 * Valida el tipo de tag xml leido
 */
public class Clasificador {
    public static final int TAG_INICIO          = 0;
    public static final int TAG_FINAL           = 1;
    public static final int TAG_AUTOCONTENIDO   = 2;
    public static final int CONTENIDO           = 3;
    public static final int XML_PROLOGO         = 4;
    public static final int COMENTARIO          = 5;
    public static final int DTD_INFO            = 6;
    public static final int CONTENIDO_CDATA     = 7;
    public static final int INVALIDO            =-1;
    /*
     * Variables Privadas
     */
    private ValidadorComentario comentario;
    private ValidadorContenidoCDATA cdata;
    private ValidadorContenido contenido;
    private ValidadorPrologo prologo;
    private ValidadorTagAutoContenido tAutoContenido;
    private ValidadorTagFinal tFinal;
    private ValidadorTagInicio tInicio;
    private ValidadorDTD dtdInfo;

    public Clasificador() {
        this.comentario = new ValidadorComentario();
        this.cdata      = new ValidadorContenidoCDATA();
        this.contenido  = new ValidadorContenido();
        this.prologo    = new ValidadorPrologo();
        this.tAutoContenido = new ValidadorTagAutoContenido();
        this.tFinal     = new ValidadorTagFinal();
        this.tInicio    = new ValidadorTagInicio();
        this.dtdInfo    = new ValidadorDTD();
    }

    /**
     * 
     * @param str cadena a evaluar
     * @return Clasificador. Tipo de elemento evaluado -1 si es invalido;
     */
    public int clasificar(String str) {
        if (comentario.validar(str)) {
            return Clasificador.COMENTARIO;
        }
        else if (contenido.validar(str)) {
            return Clasificador.CONTENIDO;
        }
        else if (prologo.validar(str)) {
            return Clasificador.XML_PROLOGO;
        }
        else if (tAutoContenido.validar(str)) {
            return Clasificador.TAG_AUTOCONTENIDO;
        }
        else if (tFinal.validar(str)) {
            return Clasificador.TAG_FINAL;
        }
        else if (tInicio.validar(str)) {
            return Clasificador.TAG_INICIO;
        }
        else if (dtdInfo.validar(str)) {
            return Clasificador.DTD_INFO;
        }
        else if(cdata.validar(str)){
            return Clasificador.CONTENIDO_CDATA;
        }
        else {
            return Clasificador.INVALIDO;
        }
    }
}
